package 设计模式.singleton;

import java.util.Arrays;

/**
 * @功能
 * @创建时间 2019/12/21
 * 阅读文章https://www.cnblogs.com/xudong-bupt/p/3433643.html
 * 更好是用下面这种方式，既不用加锁，也能实现懒加载
 * 单：指唯一
 * 例：指实例
 * 单例设计模式，即某个类在整个系统中只能有一个实例对象可被获取和使用的代码模式。
 * 要点：
 * 一、单例类只能有一个实例
 * 保证构造器私有化（防止通过构造器实例化）
 * 二、单例类必须自信创建这个实例
 * 在单例类中创建一个静态变量来保存这个唯一的实例
 * 三、单例类必须自行向整个系统提供这个实例
 * 对外提供该实例对象的获取方式
 * 直接暴露该实例对象
 * 用静态变量的get方法获取该实例对象
 */
public class Singleton {
    private Singleton(){
        System.out.println("single");
    }
    private static class Inner{
        private static Singleton s= new Singleton();
    }
    private static Singleton getSingle(){
        return Inner.s;
    }

    public static void main(String[] args) {
        Thread[] ths = new Thread[200];
        for(int i=0;i<ths.length;i++){
            ths[i] = new Thread(()->{
                Singleton.getSingle();
            });
        }
        Arrays.asList(ths).forEach(o->o.start());
    }
}
